const { Wecom } = require('wecom');

/**
 * 企业微信消息发送工具
 */
class WecomMessenger {
    /**
     * 发送企业微信消息
     * @param {Object} options 消息选项
     * @param {string} options.touser 接收消息的用户ID，多个用户用|分隔
     * @param {string} options.toparty 接收消息的部门ID，多个部门用|分隔
     * @param {string} options.totag 接收消息的标签ID，多个标签用|分隔
     * @param {string} options.content 消息内容
     * @param {string} options.msgtype 消息类型，默认为text
     * @param {number} options.agentid 应用ID，默认从环境变量获取
     * @returns {Promise} 发送结果
     */
    static async sendMessage(options) {
        const {
            touser,
            toparty,
            totag,
            content,
            msgtype = 'text',
            agentid = Number(process.env.TEST_AGENT_ID)
        } = options;

        if (!content) {
            throw new Error('消息内容不能为空');
        }
        
        if (!touser && !toparty && !totag) {
            throw new Error('接收人、部门或标签至少需要指定一个');
        }

        const wecomClient = new Wecom({
            corpId: process.env.CORPID,
            corpSecret: process.env.CORP_SECRET,
        });

        const data = {
            agentid,
            msgtype
        };

        // 添加接收人信息
        if (touser) data.touser = touser;
        if (toparty) data.toparty = toparty;
        if (totag) data.totag = totag;

        // 根据消息类型设置消息内容
        if (msgtype === 'text') {
            data.text = { content };
        } else if (msgtype === 'markdown') {
            data.markdown = { content };
        } else {
            // 可以根据需要扩展其他消息类型
            throw new Error(`不支持的消息类型: ${msgtype}`);
        }

        try {
            return await wecomClient.request({
                url: "/message/send",
                method: "POST",
                data
            });
        } catch (error) {
            console.error('企业微信消息发送失败:', error);
            throw error;
        }
    }
}

module.exports = WecomMessenger; 